Compare Pastes
Differences between the pastes
#125072 (31.07.2019 16:49)
and
#262758 (20.06.2022 21:04).
| 1 | #!/sbin/openrc-run | |
| 2 | # Copyright 1999-2017 Gentoo Foundation | |
| 1 | Благодарю ВСЕХ, кто отзвался на моё собщение. Всем отзывчивым людям, которых очень много у нас в городе, искренне признательна. | |
| 2 | Решаилась и усыпила. Вот уже 2 недели назад, с нами больше нет нашего добрейшего и могучего великана. Если у кого-то возникнет похожая ситуации обязательно расскажу и подскажу, как и где все можно сделать. | |
| 3 | # Distributed under the terms of the GNU General Public License v2 | |
| 4 | ||
| 5 | extra_started_commands="attach resume suspend" | |
| 6 | ||
| 7 | depend() {
| |
| 8 | # we can use dns and net, but we can also in most cases live without them | |
| 9 | use dns net ntp-client ntpd | |
| 10 | } | |
| 11 | ||
| 12 | create_work_directory() {
| |
| 13 | local sslcrt="/etc/ssl/certs/ca-certificates.crt" | |
| 14 | ||
| 15 | if [ ! -d "${RUNTIMEDIR}" ]; then
| |
| 16 | einfo "Directory ${RUNTIMEDIR} does not exist, creating now."
| |
| 17 | if ! mkdir -p "${RUNTIMEDIR}"; then
| |
| 18 | eerror "Directory ${RUNTIMEDIR} could not be created!"
| |
| 19 | return 1 | |
| 20 | fi | |
| 21 | ||
| 22 | # ensure proper ownership | |
| 23 | if ! chown "${USER}:${GROUP}" "${RUNTIMEDIR}"; then
| |
| 24 | eerror "Changing ownership of '${RUNTIMEDIR}' to '${USER}:${GROUP}' failed!"
| |
| 25 | return 1 | |
| 26 | fi | |
| 27 | fi | |
| 28 | ||
| 29 | if [ ! -e "${RUNTIMEDIR}"/ca-bundle.crt ]; then
| |
| 30 | if [ ! -f "${sslcrt}" ]; then
| |
| 31 | eerror "'${sslcrt}' does not exist!"
| |
| 32 | return 1 | |
| 33 | fi | |
| 34 | ||
| 35 | if ! ln -s "${sslcrt}" "${RUNTIMEDIR}"/ca-bundle.crt; then
| |
| 36 | eerror "Symlinking '${sslcrt}' failed!"
| |
| 37 | return 1 | |
| 38 | fi | |
| 39 | fi | |
| 40 | ||
| 41 | return 0 | |
| 42 | } | |
| 43 | ||
| 44 | fix_lib_symlinks() {
| |
| 45 | local src="$1" | |
| 46 | local tgt="$2" | |
| 47 | ||
| 48 | # If the source does not exist, we can not do anything | |
| 49 | if [ ! -f "${src}" ] ; then
| |
| 50 | return 1 | |
| 51 | fi | |
| 52 | ||
| 53 | # Check whether the symlink is already there and in order | |
| 54 | if [ -L "${tgt}" ] ; then
| |
| 55 | if [ -f "${tgt}" ] ; then
| |
| 56 | return 0 | |
| 57 | fi | |
| 58 | ||
| 59 | # Remove broken symlink | |
| 60 | if ! rm -f "${tgt}"; then
| |
| 61 | eerror "Removing '${tgt}' failed!"
| |
| 62 | return 1 | |
| 63 | fi | |
| 64 | fi | |
| 65 | ||
| 66 | # symlink the correct path | |
| 67 | if ! ln -snf "${src}" "${tgt}"; then
| |
| 68 | eerror "Symlinking '${src}' to '${tgt}' failed!"
| |
| 69 | return 1 | |
| 70 | fi | |
| 71 | ||
| 72 | return 0 | |
| 73 | } | |
| 74 | ||
| 75 | cuda_check() {
| |
| 76 | local libsource="/opt/cuda/lib/libcudart.so" | |
| 77 | local libtarget="${RUNTIMEDIR}/libcudart.so"
| |
| 78 | ||
| 79 | fix_lib_symlinks "${libsource}" "${libtarget}" || return 1
| |
| 80 | return 0 | |
| 81 | } | |
| 82 | ||
| 83 | opencl_check() {
| |
| 84 | local libsource="/usr/lib/libOpenCL.so" | |
| 85 | local libtarget="${RUNTIMEDIR}/libOpenCL.so"
| |
| 86 | ||
| 87 | fix_lib_symlinks "${libsource}" "${libtarget}" || return 1
| |
| 88 | return 0 | |
| 89 | } | |
| 90 | ||
| 91 | env_check() {
| |
| 92 | # Make sure the configuration is sane | |
| 93 | : ${USER:="boinc"}
| |
| 94 | : ${GROUP:="boinc"}
| |
| 95 | : ${RUNTIMEDIR:="/var/lib/boinc"}
| |
| 96 | : ${BOINCBIN:="$(which boinc_client)"}
| |
| 97 | : ${BOINC_PIDFILE:="/var/run/boinc_client.pid"}
| |
| 98 | : ${BOINCCMD:="$(which /usr/bin/boinccmd)"}
| |
| 99 | : ${ALLOW_REMOTE_RPC:="yes"}
| |
| 100 | : ${NICELEVEL:="19"}
| |
| 101 | # ARGS is not checked, it could have been explicitly set | |
| 102 | # to be empty by the user. | |
| 103 | ||
| 104 | # If the client was not found (how?) something is seriously wrong | |
| 105 | if [ ! -x "${BOINCBIN}" ]; then
| |
| 106 | eerror "No boinc_client found!" | |
| 107 | return 1 | |
| 108 | fi | |
| 109 | ||
| 110 | # The boinccmd is crucial, or we can not attach, suspend or resume | |
| 111 | # the boinc client | |
| 112 | if [ ! -x "${BOINCCMD}" ]; then
| |
| 113 | eerror "No boinccmd program found!" | |
| 114 | return 1 | |
| 115 | fi | |
| 116 | ||
| 117 | return 0 | |
| 118 | } | |
| 119 | ||
| 120 | need_passwd_arg() {
| |
| 121 | local vers=$(${BOINCBIN} --version | tr -d .)
| |
| 122 | [ -z "${vers}" ] && vers="00"
| |
| 123 | [ $(expr substr "${vers}" 1 2) -lt 74 ] && return 0
| |
| 124 | ||
| 125 | # From version 7.4 on, the default is to read | |
| 126 | # gui_rpc_auth.cfg for the password. | |
| 127 | ||
| 128 | return 1 | |
| 129 | } | |
| 130 | ||
| 131 | start_pre() {
| |
| 132 | env_check || return 1 | |
| 133 | create_work_directory || return 1 | |
| 134 | cuda_check || einfo "CUDA not supported" | |
| 135 | opencl_check || einfo "OpenCL not supported" | |
| 136 | ||
| 137 | if [ ! -f "${RUNTIMEDIR}/lockfile" ]; then
| |
| 138 | einfo "File \"${RUNTIMEDIR}/lockfile\" does not exist, assuming first run."
| |
| 139 | einfo "You need to setup an account on the BOINC project homepage beforehand!" | |
| 140 | einfo "Go to http://boinc.berkeley.edu/ and locate your project." | |
| 141 | einfo "Then either run ${RC_SERVICE} attach or connect with a gui client"
| |
| 142 | einfo "and attach to a project with that." | |
| 143 | einfo "" | |
| 144 | ewarn "Note that for attaching to some project you need your network up and running." | |
| 145 | ewarn "network is needed only for jobs fetching afterwards" | |
| 146 | fi | |
| 147 | ||
| 148 | return 0 | |
| 149 | } | |
| 150 | ||
| 151 | start() {
| |
| 152 | if [ "${ALLOW_REMOTE_RPC}" = "yes" ]; then
| |
| 153 | ARGS="${ARGS} --allow_remote_gui_rpc"
| |
| 154 | fi | |
| 155 | ||
| 156 | ARGS="${ARGS} --dir "${RUNTIMEDIR}" --redirectio"
| |
| 157 | ||
| 158 | ebegin "Starting ${RC_SVCNAME}"
| |
| 159 | start-stop-daemon --start --nicelevel ${NICELEVEL} \
| |
| 160 | --user "${USER}:${GROUP}" --quiet --make-pidfile \
| |
| 161 | --pidfile "${BOINC_PIDFILE}" --background \
| |
| 162 | --exec "${BOINCBIN}" -- ${ARGS}
| |
| 163 | eend $? | |
| 164 | } | |
| 165 | ||
| 166 | attach() {
| |
| 167 | local password="" | |
| 168 | local url="" | |
| 169 | local key="" | |
| 170 | ||
| 171 | env_check || return 1 | |
| 172 | ||
| 173 | einfo "If you can't find your account key just try to obtain it by using:" | |
| 174 | einfo " boinccmd --passwd PASSWORD_FROM_GUI_RPC_AUTH --lookup_account URL EMAIL PASSWORD" | |
| 175 | ||
| 176 | printf " Enter the Project URL: " | |
| 177 | read url | |
| 178 | printf " Enter your Account Key: " | |
| 179 | read key | |
| 180 | ||
| 181 | if ! service_started; then | |
| 182 | "${RC_SERVICE}" start
| |
| 183 | fi | |
| 184 | ||
| 185 | if need_passwd_arg; then | |
| 186 | password="--passwd \"$(cat "${RUNTIMEDIR}/gui_rpc_auth.cfg")\""
| |
| 187 | fi | |
| 188 | ||
| 189 | ebegin "${RC_SVCNAME}: Attaching to project"
| |
| 190 | start-stop-daemon --user "${USER}:${GROUP}" --quiet \
| |
| 191 | --chdir "${RUNTIMEDIR}" --exec "${BOINCCMD}" \
| |
| 192 | -- ${password} --project_attach ${url} ${key}
| |
| 193 | eend $? | |
| 194 | ||
| 195 | sleep 10 | |
| 196 | tail "${RUNTIMEDIR}/stdoutdae.txt"
| |
| 197 | } | |
| 198 | ||
| 199 | stop() {
| |
| 200 | local password="" | |
| 201 | local stop_timeout="SIGTERM/60/SIGTERM/30/SIGKILL/30" | |
| 202 | ||
| 203 | env_check || return 1 | |
| 204 | ||
| 205 | if need_passwd_arg; then | |
| 206 | password="--passwd \"$(cat "${RUNTIMEDIR}/gui_rpc_auth.cfg")\""
| |
| 207 | fi | |
| 208 | ||
| 209 | ebegin "Stopping ${RC_SVCNAME}"
| |
| 210 | start-stop-daemon --stop --quiet --progress \ | |
| 211 | --retry ${stop_timeout} \
| |
| 212 | --pidfile "${BOINC_PIDFILE}"
| |
| 213 | eend $? | |
| 214 | } | |
| 215 | ||
| 216 | resume() {
| |
| 217 | env_check || return 1 | |
| 218 | ||
| 219 | local password="" | |
| 220 | ||
| 221 | if need_passwd_arg; then | |
| 222 | password="--passwd \"$(cat "${RUNTIMEDIR}/gui_rpc_auth.cfg")\""
| |
| 223 | fi | |
| 224 | ||
| 225 | for url in $(cd "${RUNTIMEDIR}" ; \
| |
| 226 | "${BOINCCMD}" ${password} --get_project_status | \
| |
| 227 | sed -n 's/\s*master URL: //p'); do | |
| 228 | ebegin "Resuming ${url}"
| |
| 229 | start-stop-daemon --user "${USER}:${GROUP}" --quiet \
| |
| 230 | --chdir "${RUNTIMEDIR}" --exec "${BOINCCMD}" \
| |
| 231 | -- ${password} --project ${url} resume
| |
| 232 | eend $? | |
| 233 | done | |
| 234 | } | |
| 235 | ||
| 236 | suspend() {
| |
| 237 | env_check || return 1 | |
| 238 | ||
| 239 | local password="" | |
| 240 | ||
| 241 | if need_passwd_arg; then | |
| 242 | password="--passwd \"$(cat "${RUNTIMEDIR}/gui_rpc_auth.cfg")\""
| |
| 243 | fi | |
| 244 | ||
| 245 | for url in $(cd "${RUNTIMEDIR}" ; \
| |
| 246 | "${BOINCCMD}" ${password} --get_project_status | \
| |
| 247 | sed -n 's/\s*master URL: //p'); do | |
| 248 | ebegin "Suspending ${url}"
| |
| 249 | start-stop-daemon --user "${USER}:${GROUP}" --quiet \
| |
| 250 | --chdir "${RUNTIMEDIR}" --exec "${BOINCCMD}" \
| |
| 251 | -- ${password} --project ${url} suspend
| |
| 252 | eend $? | |
| 253 | done |
